<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>数组去重的n种方法</title>
</head>
<body>
<h1>本页面总结了数组去重的n种方法</h1>
</body>
</html>
<script>
//    Array.prototype.unique2 = function(){
//        this.sort(); //先排序
//        var res = [this[0]];
//        for(var i = 1; i < this.length; i++){
//            if(this[i] !== res[res.length - 1]){
//                res.push(this[i]);
//            }
//        }
//        return res;
//    }
//    var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
//    alert(arr.unique2());
       //总结：
    //1.首先方法挂载到了数组的原型链中去，方便直接调用
    //2.在数组去重的时候优先进行了排序

    //缺点：
    //1.在数组较大的情况下，容易造成资源浪费，开辟了较大的空间用于存储效果，
    //并需要不停的push新的内容到新数组当中去
      //2.排序方法比较低级



//    Array.prototype.unique3 = function(){
//        var res = [];
//        var json = {};
//        for(var i = 0; i < this.length; i++){
//            if(!json[this[i]]){
//                res.push(this[i]);
//                json[this[i]] = 1;
//            }
//        }
//        return res;
//    }
//
//    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
//    alert(arr.unique3());
    //总结：在一个空的对象上来添加属性，如果添加过了说明已经存入了结果数组中了，
    //如果对象的属性不存在，则说明元素第一次添加
    //通过对象属性的方法来判断元素是否是第一次添加，如果是，则添加，如果不是，则不添加

    //缺点是要创建一个对象来通过对象属性判断，

Array.prototype.unique1 = function()
{
    var n = []; //一个新的临时数组
    for(var i = 0; i < this.length; i++) //遍历当前数组
    {
        //如果当前数组的第i已经保存进了临时数组，那么跳过，
        //否则把当前项push到临时数组里面
        if (n.indexOf(this[i]) == -1) n.push(this[i]);
    }
    return n;
}
  //总结：利用indexof方法进行判断下这个值的下标是否第一次出现，如果是，将它放入新数组去，
    //这个方法推荐大家使用，面试的时候使用













</script>